import axios from 'axios'

const instance = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL,
  timeout: 15000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
instance.interceptors.request.use(config => {
  const token = localStorage.getItem('token')
  if (token) {
    config.headers.Authorization = `Bearer ${token}`
  }
  return config
})

// 响应拦截器（统一错误处理核心）
instance.interceptors.response.use(
  response => {
    // 成功响应但业务状态码非 200 的情况（根据后端约定调整）
    if (response.data?.code !== 200) {
      return Promise.reject(response.data)
    }
    return response.data.data
  },
  error => {
    // 统一处理 HTTP 错误状态码
    if (error.response) {
      const { status, data } = error.response

      switch (status) {
        case 400:
          showToast(data.message || '请求参数错误')
          break
        case 401:
          showToast('登录已过期，请重新登录')
          localStorage.removeItem('token')
          window.location.href = '/login' // 跳转登录页
          break
        case 403:
          showToast('没有操作权限')
          break
        case 404:
          showToast('请求资源不存在')
          break
        case 500:
          showToast('服务器错误')
          break
        default:
          showToast(`请求错误 (${status})`)
      }
    } else if (error.request) {
      showToast('网络连接异常，请检查网络')
    } else {
      showToast('请求发送失败')
    }

    return Promise.reject(error)
  }
)

export default instance
